MediatorLiveDataを使ってModel層とViewModelを連携させる
環境
Kotlin 1.3.0-rc-57
kotlinx.coroutines 0.26.1-eap13
Architecture Components 1.1.1
なぜMediatorLiveDataを使うのか
MediatorLiveDataを使うことで、Model層で定義されたLiveDataを
Viewで指定したLifecycleOwnerを使って監視することが可能となります。
MediatorLiveDataは自身がアクティブになるまで、addSourceしたLiveDataをアクティブにしません。
そのため、Model層で値が変化しても、ViewがMediatorLiveDataをobserveするまでViewに変更が通知されません。
Model(Repository)
ViewModel
※Viewにて、binding.setLifecycleOwner(this)
を行うことで、ViewModelをバインドした際に利用されるLifecycleOwnerを指定しておきましょう。
Utils
コルーチンを利用できるようにしたLiveData
実行スレッドはテストしやすいようにKoinでinjectしています。
おわりに
今まではRxを使って対応することが多かったですが、LiveDataがDataBindingに対応したことで、 ViewModelにLiveDataを持たせる意味が生まれ、より使いやすくなったと思います。 また、今回の主題ではないですが、コルーチンを利用することで、非同期処理にも対応可能と。
もはやRxは不要と言えるのではないでしょうか。 昨年はRx信者としてコードを書いていましたが、もうお世話になることも無いかもしれません。